home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / share / jockey / handlers / nvidia.py < prev    next >
Text File  |  2008-10-24  |  6KB  |  138 lines

  1. # (c) 2008 Canonical Ltd.
  2. # Author: Martin Pitt <martin.pitt@ubuntu.com>
  3. # License: GPL v2 or later
  4.  
  5. import logging
  6.  
  7. from jockey.handlers import KernelModuleHandler
  8. from jockey.xorg_driver import XorgDriverHandler
  9. from jockey.oslib import OSLib
  10. import XKit
  11. from NvidiaDetector.nvidiadetector import NvidiaDetection
  12.  
  13. # dummy stub for xgettext
  14. def _(x): return x
  15.  
  16. class NvidiaDriver(XorgDriverHandler):
  17.     def __init__(self, backend):
  18.         self._free = False
  19.         # use "None" as driver_package, since we have several;
  20.         # LocalKernelModulesDriverDB overwrites it later with the correct
  21.         # package from the modalias lists
  22.         XorgDriverHandler.__init__(self, backend, 'nvidia', None,
  23.             'nvidia', 'nv', {'NoLogo': 'True'},
  24.             add_modules=['glx'], disable_modules=[],
  25.             remove_modules=['dri', 'GLcore'],
  26.             name=_('NVIDIA accelerated graphics driver'),
  27.             description=_('3D-accelerated proprietary graphics driver for '
  28.                 'NVIDIA cards.'),
  29.             rationale=_('This driver is required to fully utilise '
  30.                 'the 3D potential of NVIDIA graphics cards, as well as provide '
  31.                 '2D acceleration of newer cards.\n\n'
  32.                 'If you wish to enable desktop effects, this driver is '
  33.                 'required.\n\n'
  34.                 'If this driver is not enabled, you will not be able to '
  35.                 'enable desktop effects and will not be able to run software '
  36.                 'that requires 3D acceleration, such as some games.'))
  37.  
  38.         self._recommended = None
  39.         
  40.     def id(self):
  41.         '''Return an unique identifier of the handler.'''
  42.  
  43.         if self.package:
  44.             i = 'xorg:' + self.module + '-' + self.package.split('-')[-1]
  45.         else:
  46.             i = 'xorg:' + self.module
  47.         if self.driver_vendor:
  48.             i += ':' + self.driver_vendor.replace(' ', '_')
  49.         return i
  50.  
  51.     def name(self):
  52.         name = XorgDriverHandler.name(self)
  53.         if self.package:
  54.             name += ' (' + _('version %s') % self.package.split('-')[-1] + ')'
  55.         return name
  56.  
  57.     def available(self):
  58.         if self.package:
  59.             version = int(self.package.split('-')[-1])
  60.             if version < 173:
  61.                 logging.debug('NVIDIA legacy driver not currently supported')
  62.                 return False
  63.         return XorgDriverHandler.available(self)
  64.  
  65.     def enable_config_hook(self):
  66.         # set DefaultDepth to 24; X.org does not work otherwise
  67.         if len(self.xorg_conf.globaldict['Screen']) == 0:
  68.             screen = self.xorg_conf.makeSection('Screen', identifier='Default Screen')
  69.         
  70.         self.xorg_conf.addOption('Screen', 'DefaultDepth', '24', position=0, prefix='')
  71.  
  72.         # version 96 needs AddARGBGLXVisuals
  73.         if self.package and self.package.endswith('-96'):
  74.             self.xorg_conf.addOption('Screen', 'AddARGBGLXVisuals', 'True', optiontype='Option', position=0)
  75.  
  76.         # version 71 needs a couple of extra driver options
  77.         if self.package and self.package.endswith('-71'):
  78.             for opt in ('AllowGLXWithComposite', 'UseEdidFreqs'):
  79.                 self.xorg_conf.addOption('Device', opt, 'True', optiontype='Option', position=0)
  80.         
  81.         # make sure that RGB path is not in the xorg.conf otherwise xorg will crash
  82.         it = 0
  83.         for section in self.xorg_conf.globaldict['Files']:
  84.             try:
  85.                 self.xorg_conf.removeOption('Files', 'RgbPath', position=it)
  86.             except (XKit.xorgparser.OptionException):
  87.                 pass
  88.             it += 1
  89.         
  90.         # remove any Disable "dri2" otherwise nvidia-settings and nvidia-xconfig will fail
  91.         module_sections = self.xorg_conf.globaldict['Module']
  92.         have_modules = len(module_sections) > 0
  93.         
  94.         if have_modules:
  95.             for section in module_sections:
  96.                 self.xorg_conf.removeOption('Module', 'Disable', value='dri2', position=section)
  97.     
  98.     def disable(self):
  99.         # make sure that nvidia-VER-kernel-source is removed too
  100.         XorgDriverHandler.disable(self)
  101.         if self.package:
  102.             flavour = self.package.split('-')[-1]#e.g. 177
  103.             kernel_source = 'nvidia-%s-kernel-source' % (flavour)
  104.             self.backend.remove_package(kernel_source)
  105.         return False
  106.     
  107.     def recommended(self):
  108.         if self._recommended == None:
  109.             nd = NvidiaDetection()
  110.             self._recommended = self.package == nd.selectDriver()
  111.         return self._recommended
  112.  
  113.     def enabled(self):
  114.         #if self.xorg_conf has NoneType, AttributeError will be raised
  115.         try:
  116.             devices = self.xorg_conf.globaldict['Device']
  117.             try:
  118.                 driver = self.xorg_conf.getDriver('Device', 0)
  119.             except (XKit.xorgparser.OptionException, XKit.xorgparser.SectionException):
  120.                 driver = None
  121.             if len(devices) == 0 or driver != 'nvidia':
  122.                 return False
  123.         except AttributeError:
  124.             return False
  125.         return KernelModuleHandler.enabled(self)
  126.  
  127.     def enables_composite(self):
  128.         '''Return whether this driver supports the composite extension.'''
  129.  
  130.         # When using an upstream installation, or -new/-legacy etc., we already
  131.         # have composite
  132.         if KernelModuleHandler.module_loaded('nvidia'):
  133.             logging.debug('enables_composite(): already using nvidia driver from nondefault package')
  134.             return False
  135.  
  136.         # neither vesa nor nv support composite, so safe to say yes here
  137.         return True
  138.